A power management system manages power consumption of various components of a device by putting the device through different power states. For example, it turns off the power or switches the device to a low-power state after a period of inactivity. The power management system for a portable or embedded system is desired for many reasons, particularly to prolong battery life and reduce heat dissipation in the device. Low heat dissipation resulting from the lower power consumption increases stability of the device as well.
The power states may include an active state, a standby state, a sleep state or a deep sleep state. For instance, deep sleep state may imply that no power or very minimal power is supplied to the device which is inactive for the most part. The standby state may be imposed when a battery for the device is plugged in and the clock is powered. The standby state may be imposed between active states of the device. When a power up request from various components of the device is made, the device makes a transition from the standby state to the active state. For the active state, the battery power is fully supplied and the clocks are completely turned on.
When the device is partially active for prolonged period time, it may be put to the sleep state. During the sleep state, both the battery voltage and one or more clocks to some components of the device may be available, but the clock to other parts of the device may be gated. Accordingly, longer battery life as well as improved performance of the device may be achieved by effectively performing power management of the device.
Currently, in order to design a power management system in a device or circuit, an engineer first determines the power management requirements and handwrites the requirements into code. Accordingly, the manual coding process may be time consuming and tedious. Furthermore, once it is completed, the code may not be readily susceptible to debugging or revision. The engineer or designer may have to go through arduous steps for these tasks especially when the engineer is not the same person who performed the coding. Furthermore, the manual coding may not be an option for those who do not have the required technical expertise in programming.